package org.meetunexpectedly.service.user;

import java.util.Collection;
import java.util.List;

/**
 * @Description: 关注流服务接口
 * @Author: pupil
 * @Date: 2024/08/20 下午 7:46
 */
public interface FeedService {

    /**
     * 内容推入发件箱
     *
     * @param userId  发件箱用户id
     * @param videoId 视频id
     * @param time    推入时间
     */
    void putOutBoxFeed(Long userId, Long videoId, Long time);

    /**
     * 内容推入收件箱
     *
     * @param userId  收件箱用户id
     * @param videoId 视频id
     * @param time    推入时间
     */
    void putInBoxFeed(Long userId, Long videoId, Long time);

    /**
     * 内容推送到粉丝收件箱
     *
     * @param videoId 视频id
     * @param fansIds 粉丝列表
     * @param time    推入时间
     */
    void putInBoxFeed(Long videoId,Collection<Long> fansIds,Long time);

    /**
     * 删除发件箱内容
     * 当前用户删除视频时 调用
     * ->删除当前用户的发件箱中视频以及粉丝下的收件箱
     *
     * @param userId  当前用户(发件箱用户id)
     * @param fans    粉丝id
     * @param videoId 视频id 需要删除的
     */
    void deleteOutBoxFeed(Long userId, Collection<Long> fans, Long videoId);

    /**
     * 删除收件箱内容
     * 当前用户取关用户时调用
     * 删除自己收件箱中的videoIds
     *
     * @param userId   当前用户(收件箱用户id)
     * @param videoIds 视频id 需要删除的
     */
    void deleteInBoxFeed(Long userId, List<Long> videoIds);

    /**
     * 初始化关注流-推拉模式 with TTL
     *
     * @param userId
     */
    void initFollowFeed(Long userId, Collection<Long> followIds);
}
